package app.graphic;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import app.model.Order;
import app.model.Product;
import app.model.tree.Node;
import app.model.tree.OrderNode;
/**
* Class that is used for creating the panel visible by the customer user.
*
* @author Bogdan
*
*/
@SuppressWarnings("serial")
public class CustomerPanel extends JPanel {
private JButton search = new JButton("Search");
private JButton order = new JButton("Order");
private JButton history = new JButton("History");
private JLabel greetLabel = new JLabel("Welcome Customer");
private JLabel label = new JLabel("Current available items");
private JTextArea historyInfo = new JTextArea();
private JTextArea info = new JTextArea();
private JScrollPane scroll = new JScrollPane(historyInfo);
private JButton exit = new JButton("Log out");
private JButton all = new JButton("Clear Filter");
public CustomerPanel(LoginController loginController, JFrame frame) {
this.setLayout(new BorderLayout());
add(this.greetLabel, BorderLayout.PAGE_START);
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.setBackground(Color.GRAY);
label.setForeground(Color.WHITE);
label.setAlignmentX(0f);
JScrollPane sp = new JScrollPane(loginController.getItemList());
sp.setPreferredSize(new Dimension(300, 200));
sp.setViewportView(loginController.getItemList());
panel.add(label, BorderLayout.NORTH);
info.setEditable(false);
panel.add(sp, BorderLayout.CENTER);
panel.add(this.info, BorderLayout.SOUTH);
add(panel, BorderLayout.LINE_START);
// buttons
JPanel bPanel = new JPanel();
bPanel.setLayout(new GridLayout(5, 1));
bPanel.setBackground(Color.GRAY);
bPanel.add(this.search);
addSearch(loginController, frame);
bPanel.add(this.order);
addOrder(loginController, frame);
bPanel.add(this.history);
addHistory(loginController, frame);
bPanel.add(this.all);
addAll(loginController, frame);
bPanel.add(this.exit);
addExit(frame);
add(bPanel, BorderLayout.CENTER);
historyInfo.setEditable(false);
scroll.setPreferredSize(new Dimension(150, 110));
scroll.setViewportView(historyInfo);
add(scroll, BorderLayout.PAGE_END);
}
public void setBound(Component comp, Rectangle bounds) {
comp.setBounds(bounds);
}
private void addExit(JFrame frame) {
exit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
frame.dispose();
}
});
}
private void addSearch(LoginController loginController, JFrame frame) {
search.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JLabel searchLabel = new JLabel("Search item: ");
JTextField search = new JTextField();
Object[] ob = { searchLabel, search };
int result = JOptionPane.showConfirmDialog(null, ob, "Searching", JOptionPane.OK_CANCEL_OPTION);
if (result == JOptionPane.OK_OPTION) {
loginController.updateListFromWarehouse(loginController.getProductsByFilter(search.getText()));
}
}
});
}
private void addOrder(LoginController loginController, JFrame frame) {
order.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String selectedProduct = (String) loginController.getItemList().getSelectedValue();
if (selectedProduct != null) {
JLabel questionLabel = new JLabel("How many items? ");
JTextField number = new JTextField();
Object[] ob = { questionLabel, number };
int result = JOptionPane.showConfirmDialog(null, ob, "Confirm order", JOptionPane.OK_CANCEL_OPTION);
int orderID = 1;
Product product = loginController
.getProductByName((String) loginController.getItemList().getSelectedValue());
if (result == JOptionPane.OK_OPTION) {
try {
int intNumber = Integer.parseInt(number.getText());
if (product.getStock() >= intNumber) {
Order order = new Order(orderID, loginController.getCustomer(), product, intNumber);
loginController.getOpDept().addNewOrder(order);
if (order != null) {
JOptionPane.showMessageDialog(frame, "You ordered the product " + product.getName()
+ " with the quantity of " + intNumber);
product.setStock(product.getStock() - intNumber);
}
} else {
JOptionPane.showMessageDialog(frame, "No available items in the stock");
}
} catch (NumberFormatException ex) {
System.out.println("Invalid number entered");
}
}
orderID++;
} else {
JOptionPane.showMessageDialog(frame, "Please select an item from the list.");
}
}
});
}
private void addHistory(LoginController loginController, JFrame frame) {
history.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
historyInfo.setText("");
historyInfo.append("Your history: \n");
int i = 1;
for (Node order : loginController.getOpDept().getAllOrders()) {
historyInfo.append("Order nr. " + i + " : "
+ loginController.getOpDept().getOrderName((OrderNode) order) + " with the quantity of "
+ loginController.getOpDept().getOrderQuantity((OrderNode) order) + "\n");
i++;
}
}
});
}
private void addAll(LoginController loginController, JFrame frame) {
all.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
loginController.updateListFromWarehouse(loginController.getAllProducts());
}
});
}
/**
* @return the info
*/
public JTextArea getInfo() {
return info;
}
}